﻿/*
write by wuweiwei
*/

/*######################
ajax 核心处理
管理ajax请求同步问题
#######################*/

var ajaxCore = {
	ajaxClassInstance:null,
	options:{},
	funHandlerIndex:0,  /*记录funHandler的索引*/
	funHandler:[],
	/*funHandler[
		{
			handler : function(){},
			data    : {}
		}
	]*/
	ajaxCallIndex : 0  /*只要$.ajax success 就 +1*/

};

ajaxCore.ajax = function(options){
	ajaxCore.ajaxClassInstance = null;
	ajaxCore.funHandlerIndex = 0;
	ajaxCore.funHandler =[];
	ajaxCore.ajaxCallIndex = 0;
	if(ajaxCore.ajaxClassInstance==null)
	{
		ajaxCore.ajaxClassInstance = new ajaxCore.ajaxClass(options);
	}
	return ajaxCore.ajaxClassInstance;
};

/*******************
处理ajax返回数据的类
*******************/
ajaxCore.ajaxClass = function(options){
	this.options = options;
};

/**********************************
发送$.ajax请求，并安排回调函数的顺序
在所有请求完毕后，按照回调函数的顺序
执行
**********************************/
ajaxCore.ajaxClass.prototype.success = function(f){
	var index = ajaxCore.funHandlerIndex++;
	ajaxCore.funHandler.push({
		handler : f,
		data    : null
	});

	$.ajax({
		url : this.options.url,
		type : this.options.type || "GET",
		dataType : this.options.dataType || "html",
		success : function(data){
			ajaxCore.ajaxCallIndex++;
			ajaxCore.funHandler[index].data = data;
			if(ajaxCore.ajaxCallIndex>=ajaxCore.funHandlerIndex)
			{
				ajaxCore.ajaxClassInstance.ok();
			}
		},
		error : function(e){

		}
	});
	return ajaxCore.ajaxClassInstance;
};

/**********************************
在最后一个success里ajax的请求后调用 
**********************************/
ajaxCore.ajaxClass.prototype.ajax = function(options){
	this.options = options;
	return ajaxCore.ajaxClassInstance;
}

/**********************************
在最后一个success里ajax的请求后调用 
**********************************/
ajaxCore.ajaxClass.prototype.ok = function(){
	var i;
	var len = ajaxCore.funHandler.length;

	for(i=0;i<len;i++)
	{
		ajaxCore.funHandler[i].handler.call(this , ajaxCore.funHandler[i].data);
	}
};


/*使用方式：

ajaxCore.ajax({
	url:"json/json1.json",
	dataType:"json"
}).success(function(data){
	alert(data.name);
}).ajax({
	url:"json/json2.json"
}).success(function(data){
	alert(data);
});

*/
